#include "pcie_blck.h"
#include "ui_pcie_blck.h"
#include "pcie_fun.h"


pcie_blck::pcie_blck(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::pcie_blck)
{
    ui->setupUi(this);
    // ============================================
    // init dev list
    ui->ui_dev_list->setCurrentIndex(0);
    ui->ui_dev_list->addItem(dev_pcie+"_c2h_0");
    ui->ui_dev_list->addItem(dev_pcie+"_h2c_0");
    ui->ui_dev_list->addItem(dev_pcie+"_control");

    ui->ui_data_wr->setText("11");
    //limit addr input
    QRegExp re("[0-9a-fA-F]{1,8}");
    QValidator *validator = new QRegExpValidator(re, this);
    ui->ui_addr_wr->setValidator(validator);
    ui->ui_addr_wr->setText("00000000");
    //set order of PCIE operate
    ui->ui_pcie_open->setEnabled(true);
    ui->ui_pcie_write->setEnabled(false);
    ui->ui_pcie_read->setEnabled(false);
    ui->ui_pcie_close->setEnabled(false);
    ui->ui_pcie_speed->setEnabled(false);
}

pcie_blck::~pcie_blck()
{
    delete ui;
}

void pcie_blck::on_ui_pcie_open_clicked()
{

    if(!pcie_init())
    {
        ui->ui_data_show->append("init " + ui->ui_dev_list->currentText() + " error");

    }
    else
    {
        ui->ui_data_show->append("init " + ui->ui_dev_list->currentText() + " succeed");
        ui->ui_pcie_open->setEnabled(false);
        ui->ui_pcie_write->setEnabled(true);
        ui->ui_pcie_read->setEnabled(true);
        ui->ui_pcie_close->setEnabled(true);
        ui->ui_pcie_speed->setEnabled(true);

    }
}


void pcie_blck::on_ui_pcie_write_clicked()
{
    //write data
    //QByteArray ba = ui->ui_data_wr->text().toUtf8();
    //memcpy(h2c_align_mem_tmp,ba.data(),sizeof(ba));
    quint32 spd;
    spd = h2c_transfer(1024);
    //close dev
    ui->ui_data_show->append(" write data speed is" + QString::number(spd));
}


void pcie_blck::on_ui_pcie_read_clicked()
{
    //read data
    //QByteArray ba;
    quint32 spd;
    spd = c2h_transfer(1024);
    //memcpy(ba.data(),c2h_align_mem_tmp,1024);
    ui->ui_data_show->append("read data speed is "+ QString::number(spd));
    //ui->ui_data_show->append(QString(ba));
}


void pcie_blck::on_ui_pcie_close_clicked()
{
    pcie_deinit();
    ui->ui_pcie_open->setEnabled(true);
    ui->ui_pcie_write->setEnabled(false);
    ui->ui_pcie_read->setEnabled(false);
    ui->ui_pcie_close->setEnabled(false);
    ui->ui_pcie_speed->setEnabled(false);

    ui->ui_data_show->append("pcie is close");
}


void pcie_blck::on_ui_pcie_speed_clicked()
{
    quint32 spd;
    spd = h2c_transfer(1024);
    ui->ui_speed_wr->setValue(spd);
    spd = c2h_transfer(1024);
    ui->ui_speed_rd->setValue(spd);
}

